/**
 * 设备API封装
 */

// 导入云对象
const sandart = uniCloud.importObject('sandart')

export default {
	/**
	 * 获取用户设备列表
	 * @returns {Promise<object>} 返回设备列表
	 */
	async getDeviceList() {
		try {
			const result = await sandart.getDeviceList()
			return result
		} catch (error) {
			console.error('[DEVICE API] getDeviceList error:', error)
			throw error
		}
	},
	
	/**
	 * 添加设备
	 * @param {object} params - 设备参数 (必填)
	 * @param {string} params.deviceId - 设备ID (必填)
	 * @param {string} params.sn - 设备SN码 (必填)
	 * @param {string} params.firmwareVersion - 固件版本 (必填)
	 * @param {string} params.hardwareVersion - 硬件版本 (必填)
	 * @param {string} params.macAddress - MAC地址 (必填)
	 * @param {object|string} params.deviceName - 设备名称，支持多语言对象或字符串 (必填)
	 * @param {string} [params.deviceType='pro'] - 设备类型
	 * @param {string} [params.location=''] - 设备位置
	 * @returns {Promise<object>} 返回添加结果
	 * @example
	 * // 使用字符串设备名称
	 * const result1 = await deviceApi.addDevice({
	 *   deviceId: 'device123',
	 *   sn: 'SN123456789',
	 *   firmwareVersion: '1.0.0',
	 *   hardwareVersion: '2.0',
	 *   macAddress: '00:11:22:33:44:55',
	 *   deviceName: '我的沙画设备',
	 *   deviceType: 'pro',
	 *   location: '客厅'
	 * })
	 * 
	 * // 使用多语言设备名称
	 * const result2 = await deviceApi.addDevice({
	 *   deviceId: 'device456',
	 *   sn: 'SN987654321',
	 *   firmwareVersion: '1.1.0',
	 *   hardwareVersion: '2.1',
	 *   macAddress: '00:AA:BB:CC:DD:EE',
	 *   deviceName: {
	 *     'zh-Hans': '卧室沙画设备',
	 *     'en': 'Bedroom Sand Art Device'
	 *   },
	 *   deviceType: 'ultra',
	 *   location: '卧室'
	 * })
	 */
	async addDevice(params) {
		try {
			const result = await sandart.addDevice(params)
			return result
		} catch (error) {
			console.error('[DEVICE API] addDevice error:', error)
			throw error
		}
	},
	
	/**
	 * 更新设备信息
	 * @param {object} params - 更新参数 (必填)
	 * @param {string} params.deviceId - 设备ID (必填)
	 * @param {object} params.deviceInfo - 设备信息 (必填)
	 * @param {string} [params.deviceInfo.device_name] - 设备名称
	 * @param {string} [params.deviceInfo.location] - 设备位置
	 * @param {object} [params.deviceInfo.light_settings] - 灯光设置
	 * @param {boolean} [params.deviceInfo.light_settings.enabled] - 是否启用灯光
	 * @param {string} [params.deviceInfo.light_settings.mode] - 灯光模式: 'constant'=常量模式, 'breathing'=呼吸模式, 'rainbow'=彩虹模式, 'tracking'=轨迹跟踪
	 * @param {string} [params.deviceInfo.light_settings.color] - 颜色值 (十六进制颜色码，如 '#FF0000')
	 * @param {number} [params.deviceInfo.light_settings.brightness] - 亮度 (0-100)
	 * @param {number} [params.deviceInfo.light_settings.speed] - 变化速度 (0-100，仅在呼吸、彩虹、轨迹跟踪模式下有效)
	 * @param {object} [params.deviceInfo.playback_settings] - 播放设置
	 * @returns {Promise<object>} 返回更新结果
	 * @example
	 * // 更新设备灯光设置
	 * const result = await deviceApi.updateDevice({
	 *   deviceId: 'device123',
	 *   deviceInfo: {
	 *     device_name: '我的沙画设备',
	 *     location: '客厅',
	 *     light_settings: {
	 *       enabled: true,
	 *       mode: 'constant',
	 *       color: '#FF0000',
	 *       brightness: 80,
	 *       speed: 50
	 *     }
	 *   }
	 * })
	 */
	async updateDevice(params) {
		try {
			const result = await sandart.updateDevice(params)
			return result
		} catch (error) {
			console.error('[DEVICE API] updateDevice error:', error)
			throw error
		}
	},
	
	/**
	 * 删除设备
	 * @param {object} params - 删除参数 (必填)
	 * @param {string} params.deviceId - 设备ID (必填)
	 * @returns {Promise<object>} 返回删除结果
	 */
	async deleteDevice(params) {
		try {
			const result = await sandart.deleteDevice(params)
			return result
		} catch (error) {
			console.error('[DEVICE API] deleteDevice error:', error)
			throw error
		}
	},
	
	/**
	 * 通过设备SN删除设备
	 * @param {object} params - 删除参数 (必填)
	 * @param {string} params.sn - 设备序列号 (必填)
	 * @returns {Promise<object>} 返回删除结果
	 */
	async deleteDeviceBySn(params) {
		try {
			console.log('[DEVICE API] deleteDeviceBySn params:', params)
			const result = await sandart.deleteDeviceBySn(params)
			console.log('[DEVICE API] deleteDeviceBySn result:', result)
			return result
		} catch (error) {
			console.error('[DEVICE API] deleteDeviceBySn error:', error)
			throw error
		}
	},
	
	/**
	 * 移除设备分享（分享者退出设备）
	 * @param {object} params - 参数 (必填)
	 * @param {string} params.sn - 设备序列号 (必填)
	 * @returns {Promise<object>} 返回移除结果
	 */
	async removeDeviceShare(params) {
		try {
			console.log('[DEVICE API] removeDeviceShare params:', params)
			const result = await sandart.removeDeviceShare(params)
			console.log('[DEVICE API] removeDeviceShare result:', result)
			return result
		} catch (error) {
			console.error('[DEVICE API] removeDeviceShare error:', error)
			throw error
		}
	},
	
	/**
	 * 控制设备灯光
	 * @param {object} params - 灯光控制参数 (必填)
	 * @param {string} params.deviceId - 设备ID (必填)
	 * @param {boolean} params.enabled - 是否启用灯光 (必填)
	 * @param {string} [params.mode='constant'] - 灯光模式: 'constant'=常量模式, 'breathing'=呼吸模式, 'rainbow'=彩虹模式, 'tracking'=轨迹跟踪
	 * @param {string} [params.color='#FFFFFF'] - 颜色值 (十六进制颜色码)
	 * @param {number} [params.brightness=50] - 亮度 (0-100)
	 * @param {number} [params.speed=50] - 变化速度 (0-100，仅在呼吸、彩虹、轨迹跟踪模式下有效)
	 * @returns {Promise<object>} 返回控制结果
	 * @example
	 * // 设置常量模式红色灯光
	 * const result1 = await deviceApi.controlLighting({
	 *   deviceId: 'device123',
	 *   enabled: true,
	 *   mode: 'constant',
	 *   color: '#FF0000',
	 *   brightness: 80
	 * })
	 * 
	 * // 设置呼吸模式蓝色灯光
	 * const result2 = await deviceApi.controlLighting({
	 *   deviceId: 'device123',
	 *   enabled: true,
	 *   mode: 'breathing',
	 *   color: '#0000FF',
	 *   brightness: 60,
	 *   speed: 30
	 * })
	 * 
	 * // 设置彩虹模式
	 * const result3 = await deviceApi.controlLighting({
	 *   deviceId: 'device123',
	 *   enabled: true,
	 *   mode: 'rainbow',
	 *   brightness: 70,
	 *   speed: 80
	 * })
	 * 
	 * // 关闭灯光
	 * const result4 = await deviceApi.controlLighting({
	 *   deviceId: 'device123',
	 *   enabled: false
	 * })
	 */
	async controlLighting(params) {
		try {
			// 构建传递给后端的数据对象
			const lightingData = {
				enabled: params.enabled
			}

			// 只在启用灯光时传递其他参数
			if (params.enabled) {
				if (params.mode !== undefined) lightingData.mode = params.mode
				if (params.color !== undefined) lightingData.color = params.color
				if (params.brightness !== undefined) lightingData.brightness = params.brightness
				if (params.speed !== undefined) lightingData.speed = params.speed
			}

			const result = await sandart.controlDevice({
				deviceId: params.deviceId,
				action: 'lighting',
				data: lightingData
			})
			return result
		} catch (error) {
			console.error('[DEVICE API] controlLighting error:', error)
			throw error
		}
	},

	/**
	 * 控制设备
	 * @param {object} params - 控制参数 (必填)
	 * @param {string} params.deviceId - 设备ID (必填)
	 * @param {string} params.action - 操作类型 (必填): 'power'|'pattern'|'brightness'|'color_temperature'|'lighting'|'play'|'pause'|'stop'|'next'|'prev'|'playlist'
	 * @param {object} params.data - 操作数据 (必填)
	 * 
	 * 电源控制 (action='power'):
	 * @param {boolean} params.data.power - 电源状态: true=开机, false=关机
	 * 
	 * 图案控制 (action='pattern'):
	 * @param {string} params.data.pattern_id - 图案ID
	 * 
	 * 亮度控制 (action='brightness'):
	 * @param {number} params.data.brightness - 亮度值 (1-100)
	 * 
	 * 色温控制 (action='color_temperature'):
	 * @param {number} params.data.color_temperature - 色温值 (2000-6500)
	 * 
	 * 灯光控制 (action='lighting'):
	 * @param {boolean} params.data.enabled - 是否启用灯光
	 * @param {string} [params.data.mode='constant'] - 灯光模式: 'constant'=常量模式, 'breathing'=呼吸模式, 'rainbow'=彩虹模式, 'tracking'=轨迹跟踪
	 * @param {string} [params.data.color='#FFFFFF'] - 颜色值 (十六进制颜色码)
	 * @param {number} [params.data.brightness=50] - 亮度 (0-100)
	 * @param {number} [params.data.speed=50] - 变化速度 (0-100)
	 * 
	 * 播放控制 (action='play'):
	 * @param {string} [params.data.pattern_id] - 指定播放的图案ID (可选，不指定则播放当前图案)
	 * 
	 * 暂停控制 (action='pause'): 无需额外参数
	 * 停止控制 (action='stop'): 无需额外参数
	 * 下一首 (action='next'): 无需额外参数
	 * 上一首 (action='prev'): 无需额外参数
	 * 
	 * 播放列表控制 (action='playlist'):
	 * @param {array} params.data.patterns - 图案列表
	 * @param {number} [params.data.current_index=0] - 当前播放索引
	 * @param {number} [params.data.play_mode=0] - 播放模式: 0=顺序播放, 1=单曲循环, 2=随机播放
	 * @param {boolean} [params.data.auto_play=true] - 是否自动播放
	 * 
	 * @returns {Promise<object>} 返回控制结果
	 */
	async controlDevice(params) {
		try {
			const result = await sandart.controlDevice(params)
			return result
		} catch (error) {
			console.error('[DEVICE API] controlDevice error:', error)
			throw error
		}
	},
	
	/**
	 * 获取设备详情
	 * @param {object} params - 查询参数 (必填)
	 * @param {string} params.deviceId - 设备ID (可选，与sn二选一)
	 * @param {string} params.sn - 设备SN码 (可选，与deviceId二选一)
	 * @returns {Promise<object>} 返回设备详情，包含完整的当前播放图案信息（名称、封面、播放时间等）
	 */
	async getDeviceDetail(params) {
		try {
			const result = await sandart.getDeviceDetail(params)
			return result
		} catch (error) {
			console.error('[DEVICE API] getDeviceDetail error:', error)
			throw error
		}
	},
	
	/**
	 * 更新设备状态
	 * @param {object} params - 更新参数 (必填)
	 * @param {string} params.deviceId - 设备ID (必填)
	 * @param {number} params.status - 设备状态 (必填): 0=离线, 1=在线
	 * @param {object} [params.currentPattern] - 当前播放图案信息
	 * @param {string} [params.currentPattern.pattern_id] - 图案ID
	 * @param {string} [params.currentPattern.pattern_name] - 图案名称
	 * @param {number} [params.currentPattern.progress] - 播放进度
	 * @param {number} [params.currentPattern.status] - 播放状态: 0=停止, 1=播放, 2=暂停
	 * @returns {Promise<object>} 返回更新结果
	 */
	async updateDeviceStatus(params) {
		try {
			const result = await sandart.updateDeviceStatus(params)
			return result
		} catch (error) {
			console.error('[DEVICE API] updateDeviceStatus error:', error)
			throw error
		}
	},

	/**
	 * 控制设备播放设置
	 * @param {object} params - 播放控制参数 (必填)
	 * @param {string} params.deviceId - 设备ID (必填)
	 * @param {number} [params.speed=100] - 播放速度百分比 (50-200)
	 * @param {boolean} [params.pauseAfterComplete=false] - 播放完成后是否暂停
	 * @param {number} [params.pauseDuration=5] - 暂停时长（秒，1-600）
	 * @param {boolean} [params.clearBeforeNew=true] - 开始新图案前是否清空沙盘
	 * @returns {Promise<object>} 返回控制结果
	 * @example
	 * // 设置播放速度为150%，播放完成后暂停30秒，开始新图案前清空沙盘
	 * const result = await deviceApi.controlPlaybackSettings({
	 *   deviceId: 'device123',
	 *   speed: 150,
	 *   pauseAfterComplete: true,
	 *   pauseDuration: 30,
	 *   clearBeforeNew: true
	 * })
	 * 
	 * // 只设置播放速度为80%
	 * const result2 = await deviceApi.controlPlaybackSettings({
	 *   deviceId: 'device123',
	 *   speed: 80
	 * })
	 */
	async controlPlaybackSettings(params) {
		try {
			// 构建传递给后端的播放设置数据对象
			const result = await sandart.controlDevice({
				deviceId: params.deviceId,
				action: 'playback_settings',
				data: params
			})
			return result
		} catch (error) {
			console.error('[DEVICE API] controlPlaybackSettings error:', error)
			throw error
		}
	},

	/**
	 * 转移设备所有权（重新配置WiFi时调用）
	 * @param {object} params - 参数 (必填)
	 * @param {string} params.sn - 设备序列号 (必填)
	 * @returns {Promise<object>} 返回转移结果
	 * @example
	 * const result = await deviceApi.transferDeviceOwnership({
	 *   sn: '680766215788'
	 * })
	 */
	async transferDeviceOwnership(params) {
		try {
			console.log('[DEVICE API] transferDeviceOwnership params:', params)
			const result = await sandart.transferDeviceOwnership(params)
			console.log('[DEVICE API] transferDeviceOwnership result:', result)
			return result
		} catch (error) {
			console.error('[DEVICE API] transferDeviceOwnership error:', error)
			throw error
		}
	}
}
